package jdk6.derby;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Description: jdk1.6新特性：嵌入式数据库Derby（Derby）
 * Derby并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK6.0里面带的这个Derby的版本是10.2.1.7,支持存储过程和触发器;
 * 有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,
 * 前者的数据库服务器和客户端都在同一个JVM里面运行,
 * 后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上.
 * 值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 4.0规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行.
 * 安装完JDK6.0后,Derby会被安装到<JDK6_HOME>/db下面,在<JDK6_HOME>/db/demo/programs下面还有一些示例程序,演示了如何启动,连接Derby数据库以及JDBC API的使用
 * 
 * 需要把jdk目录底下的/db/lib/derby.jar移动到jre/lib/ext/目录底下才能运行，要不然会 class not found
 * 会在程序目录底下新建一个DerbyDB文件夹
 * 
 * 个人认为：要是做JavaSE的时候就会变得非常有用，因为不需要用户安装mysql的client了，直接使用jdk自带的数据库连接
 * @author Kwum
 * @date 2017年6月17日 下午5:19:13
 * @version 1.0
 */

public class Run {

    //driver在derby.jar里面
    private static final String driver = "org.apache.derby.jdbc.EmbeddedDriver";
    private static final String dbName = "DerbyDB";
    //create=true表示当数据库不存在时就创建它
    private static final String dbURL = "jdbc:derby:"+dbName+";create=true";
    
    public static void main(String[] args) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {
        Class.forName(driver).newInstance();
        //启动嵌入式数据库
        Connection conn = DriverManager.getConnection(dbURL);
        Statement st = conn.createStatement();
        //创建cat表
        //id自动增长 GENERATED ALWAYS AS IDENTITY
        //mysql才是 auto_increment
        st.execute("CREATE TABLE cat (id INT GENERATED ALWAYS AS IDENTITY NOT NULL PRIMARY KEY, name VARCHAR(30) NOT NULL)");
        //插入一条数据
        st.executeUpdate("INSERT INTO cat(name) VALUES ('beebee')");
        //读取刚插入的数据
        ResultSet rs = st.executeQuery("SELECT * FROM cat");
        while(rs.next()){
            int id = rs.getInt(1);
            String name = rs.getString(2);
            System.out.println("Cat's id : "+id+" ; name : "+name);
        }
        rs.close();
        st.close();
        conn.close();
    }

}


//连接网络数据库
//public class NetworkServerDerbyTester {
//    public static void main(String[] args) {
//        String driver = "org.apache.derby.jdbc.ClientDriver";//在derbyclient.jar里面
//        String dbName="NetworkDB";
//        String connectionURL = "jdbc:derby://localhost:1527/" + dbName + ";create=true";
//        try {
//            /*
//             创建Derby网络服务器,默认端口是1527,也可以通过运行
//             <Derby_Home>\frameworks\NetworkServer\bin\startNetworkServer.bat
//             来创建并启动Derby网络服务器,如果是Unix,用startNetworkServer.ksh
//            */
//            //NetworkServerControl类在derbynet.jar里面
//            NetworkServerControl derbyServer = new NetworkServerControl();
//            //用系统输出作为Derby数据库的输出
//            PrintWriter pw = new PrintWriter(System.out);
//            derbyServer.start(pw);//启动Derby服务器
//            Class.forName(driver);
//            DriverManager.getConnection(connectionURL);
//            //do something
//            derbyServer.shutdown();//关闭Derby服务器
//        } catch (Exception ex) {
//            ex.printStackTrace();
//        }
//    }
//}
